package Demo;

//在多个实例中使用单独的锁对象

public class Demo_406 {
    public static void main(String[] args) throws InterruptedException {
        //初始化累加对象
        Counter406 counter = new Counter406();
        Counter406 counter1 = new Counter406();

        //创建两个线程对一个变量进行累加
        Thread t1 = new Thread(()->{
            //5万次
            for (int i=0;i<50000;i++){
                counter.increase();  //通过counter.increase()方法对counter进行递增操作，每次递增1并循环5万次
            }
        });

        Thread t2 = new Thread(()->{
            //5万次
            for (int i=0;i<50000;i++){
                counter1.increase();  //通过counter.increase()方法对counter进行递增操作，每次递增1并循环5万次
            }
        });

        //启动线程
        t1.start();
        t2.start();

        //等待线程执行完成
        t1.join();
        t2.join();

        //查看运行结果
        System.out.println("count ="+counter.count);  //小于10万次，随机值
    }
}

class Counter406{
    //初始值是0
    public static int count = 0;

    //单独定义一个对象做为对象使用,用于后续的代码中实现同步操作
    Object locker = new Object();
    //累加方法
    public void increase(){
        //只锁定代码块{count++}
        synchronized (locker){
            count++;
        }
    }
}